package com.jielin.handling.service.policeplatform;

import com.alibaba.fastjson.JSONObject;
import com.amazonaws.services.dynamodbv2.xspec.M;
import com.jielin.handling.entity.alarmlog.AlarmLog;
import com.jielin.handling.entity.criminalcase.CriminalCase;
import com.jielin.handling.entity.material.MaterialType;
import com.jielin.handling.entity.material.MaterialTypeDocument;
import com.jielin.handling.entity.policeplatform.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.jielin.handling.entity.unit.OrganizationVo;
import com.jielin.handling.entity.unit.UnitInfo;
import com.jielin.handling.entity.vo.*;

import javax.servlet.http.HttpServletResponse;

/**
 * @author chenzhang
 * @date 2019/5/7 - 19:27
 */
public interface PolicePlatformService {

    Map<String, List<Object>> findPassCaseCountByUnitCode(String[] UnitCodeS, String status);// 根据单位id查询审核完成案件数

    //获取所有单位编号
    List<String> selectUnicode();

    //定时器获取警综数据
    void requestPoliceData();

    //根据单位编号查询此单位接处警数量
    List<Map> findCaseAccepptHandle(String[] unitCodes);

    //根据单位编号查询下级单位案件状态统计
    DateMount findCaseStatusNum(String[] unitCodes);

    Map<String, List<Integer[]>> findCaseCountByUnitCode(String[] unitCode);// 根据单位编号查询近三年每月的案件数量

    Map<String, Object> findBeforeYearsCase(String[] array);//查询前年各类案件的数量信息

    Map<String, Object> findLastYearsCase(String[] array);//查询去年各类案件的数量信息

    Map<String, Object> findThisYearsCase(String[] array);//查询今年各类案件的数量信息

    Map<String, Object> findThreeYearsEndCase(String handleUnitCode);//查询近三年审核完成案件数

    DateMount findToDayNum(String[] unitCodes);

    //查询每天和每周人数上涨比例
    DateMount getProportion(String[] unitCodes);

    //正在使用审讯室
    DateMount selectRoomInUse(String[] unitCodes);

    //超时人数统计
    DateMount selectOvertimeMan(String[] unitCodes);

    //等待审讯人数统计
    DateMount selectAwaitingTrial(String[] unitCodes);

    //案件类型统计
    DateMount caseStatistics(String[] unitCodes);

    Map<String, List<Object>> findMaterialCountByUnitCode(String[] unitCodes);// 根据单位编号查询卷宗出入库统计

    DateMount selectManAndWoMan(String[] unitCodes);

    List<CabinetVo> findMaterialCountByUnitCodeAndLibraryStatus(String[] unitCodes, String libraryStatus);// 根据单位编号与卷宗状态统计卷宗

    List<CabinetVo> findListMaterialCountByUnitCode(String[] unitCodes);// 根据单位编号统计各个单位的卷宗

    Map selectAllWarning(String[] unitCodes);//依次查询每个单位告警提醒

    Map<String, Object> selectStatistics(UnitInfo unitInfo);//监督中心案件类型统计

    List<Map<String, Object>> selectStatisticsSort(UnitInfo unitInfo);//监督中心案件类型统计分类

    List<Organization> selectCriminalCaseSort(UnitInfo unitInfo);//监督中心案件细类别统计分类

    List<AlarmLog> selectAllByUnitcode(WarningVo warningVo);//查询某个单位所有告警提醒

    void requestAwarning();

    int updateWarning(String id);//更新告警提醒是否已读

    List<AlarmLog> selectAll(WarningVo warningVo);
    //void getPoliceDataByUnitCode();

    void grtAssessment(String unitCode, String date, String registTime);

    List<Examination> selectExaminationStatistics(Examination examination);//执法考核统计

    void ExaminationInfoReport(Examination examination, HttpServletResponse response);//执法考核统计导出

    void requestExamination();//执法考核数据统计

    List<OrganizationVo> findUnitInfoByUnitCodeS(String unitCodes);// 根据单位编号查询本单位及子单位

    void requestSuperiorOrg();//获取父子级单位关系

    Map<String, Object> selectVideoByUnitCode(JSONObject queryCondition);

    Map<String, Object> findPassCaseByUnitCode(String[] array);//新版查询完结案件数量排名

    Map<String, Object> selectCaseTypeSum(JSONObject queryCondition);

    Map<String, Object> selectFileTransferSum(JSONObject queryCondition);

    Map<String, Object> selectMapCaseSum(JSONObject queryCondition);

    /**
     * 查询恩施州下每个县/市的案件数量
     *
     * @param queryCondition
     * @return
     */
    List<Map<String, Object>> selectMapCaseSums(JSONObject queryCondition);

    Map<String, Object> selectStatementCaseSum(JSONObject queryCondition);//查询案情信息統計

    void getRecordInfo();//执行定时任务获取三合一录音信息

    List<RecordInfo> selectRecordInfol(RecordInfo recordInfo);//三合一平台查询案件下的录音成功

    int updateRecordInfo(int M, String id, String documentId, String fileDocPath, String Spath);//源文件在xsky,复制到桶下的文件夹

    int updateInfoOnServer(int M, String id, String documentId, String fileDocPath, String Spath);//源文件在服务器，复制到桶下的文件夹

    Map selectCallPolice(String[] array); //三合一110/119/122报警占比比例

    Map<String, Object> selectPoliceSituation(String handleUnitCode);//三合一警情占比比例

    int selectPoliceSituationCountByCode(String handleUnitCode);
    void addPoliceSituation(PoliceSituationMiddle policeSituationMiddle);
    int countForCJPolice(String handleUnitCode);//获取警情处警总数
    int countForEffectivePolice(String handleUnitCode);//获取有效警情总数
    Map<String, Object> countForReceiveThePolice(String handleUnitCode);//获取接警事件总数
    int countForInvalidPolice(String handleUnitCode);//获取无效警情总数
    int countForBigPolice(String handleUnitCode);//获取重大警情总数
    int countForOutPolice(String handleUnitCode);//获取涉外警情总数

    //List<CallPoliceProportion> selectPoliceDetails(int pageSize, int pageNum, String unitCodes);//监督中心警情统计二级页面详情列表

    List<CallPoliceProportion> selectPoliceDetails(CallPoliceProportion cp);//监督中心警情统计二级页面详情列表

    List<PoliceSituationVo> selectPoliceSituationByUnicode(PoliceSituationVo vo);//监督中心警情统计二级页面根据单位编号查询警情详情列表

    List<Map<String, Object>> selectCriminalCase(String[] array);//查询监督中心刑事案件排名成功

    int selectOnlinePoliceCount();
}
